package com.shengyuan.manage_os.old.ying.boce.jsy;

import java.security.AccessControlException;
import java.util.Properties;

public class Configuration {
	
	private static Properties defaultProperty;
	static {
		init();
	}

	static void init() {
		defaultProperty = new Properties();
		defaultProperty.setProperty("fanfoudroid.debug", "true");
		defaultProperty.setProperty("fanfoudroid.source", "fanfoudroid");
		defaultProperty.setProperty("fanfoudroid.clientURL",
				"http://sandin.tk/fanfoudroid.xml");
		defaultProperty.setProperty("fanfoudroid.http.userAgent",
				"fanfoudroid 1.0");
		// defaultProperty.setProperty("fanfoudroid.user","");
		// defaultProperty.setProperty("fanfoudroid.password","");
		defaultProperty.setProperty("fanfoudroid.http.useSSL", "false");
		// defaultProperty.setProperty("fanfoudroid.http.proxyHost","");
		defaultProperty.setProperty("fanfoudroid.http.proxyHost.fallback",
				"http.proxyHost");
		// defaultProperty.setProperty("fanfoudroid.http.proxyUser","");
		// defaultProperty.setProperty("fanfoudroid.http.proxyPassword","");
		// defaultProperty.setProperty("fanfoudroid.http.proxyPort","");
		defaultProperty.setProperty("fanfoudroid.http.proxyPort.fallback",
				"http.proxyPort");
		defaultProperty.setProperty("fanfoudroid.http.connectionTimeout",
				"20000");
		defaultProperty.setProperty("fanfoudroid.http.readTimeout", "120000");
		defaultProperty.setProperty("fanfoudroid.http.retryCount", "3");
		defaultProperty.setProperty("fanfoudroid.http.retryIntervalSecs", "10");
		defaultProperty.setProperty("fanfoudroid.oauth.consumerKey",""); // your appKey
		defaultProperty.setProperty("fanfoudroid.oauth.consumerSecret",""); // your secret
		defaultProperty.setProperty("fanfoudroid.oauth.baseUrl","http://fanfou.com/oauth");
		defaultProperty.setProperty("fanfoudroid.async.numThreads", "1");
		defaultProperty.setProperty("fanfoudroid.clientVersion", "1.0");
	}
	
	public static String getSource() {
		return getProperty("fanfoudroid.source");
	}
	public static String getProperty(String name) {
		return getProperty(name, null);
	}
	public static boolean useSSL() {
		return getBoolean("fanfoudroid.http.useSSL");
	}
	public static boolean getBoolean(String name) {
		String value = getProperty(name);
		return Boolean.valueOf(value);
	}
	public static String getScheme() {
		return useSSL() ? "https://" : "http://";
	}	
	public static String getProperty(String name, String fallbackValue) {
		String value;
		try {
			value = System.getProperty(name, fallbackValue);
			if (null == value) {
				value = defaultProperty.getProperty(name);
			}
			if (null == value) {
				String fallback = defaultProperty.getProperty(name
						+ ".fallback");
				if (null != fallback) {
					value = System.getProperty(fallback);
				}
			}
		} catch (AccessControlException ace) {
			// Unsigned applet cannot access System properties
			value = fallbackValue;
		}
		return replace(value);
	}
	
	private static String replace(String value) {
		if (null == value) {
			return value;
		}
		String newValue = value;
		int openBrace = 0;
		if (-1 != (openBrace = value.indexOf("{", openBrace))) {
			int closeBrace = value.indexOf("}", openBrace);
			if (closeBrace > (openBrace + 1)) {
				String name = value.substring(openBrace + 1, closeBrace);
				if (name.length() > 0) {
					newValue = value.substring(0, openBrace)
							+ getProperty(name)
							+ value.substring(closeBrace + 1);

				}
			}
		}
		if (newValue.equals(value)) {
			return value;
		} else {
			return replace(newValue);
		}
	}
}
